//package com.framework.loippi.service;
//
//import cn.hutool.core.collection.CollectionUtil;
//import cn.hutool.core.util.StrUtil;
//import com.alibaba.fastjson.JSON;
//import com.framework.loippi.entity.TUser;
//import cn.hutool.json.JSONUtil;
//import cn.hutool.json.JSONObject;
//import cn.hutool.json.JSONArray;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.http.*;
//import org.springframework.stereotype.Service;
//import org.springframework.web.client.RestTemplate;
//
//import java.util.HashMap;
//import java.util.List;
//import java.util.Map;
//import java.util.stream.Collectors;
//
//@Slf4j
//@Service
//public class  IMService {
//    @Value("${hx.host}")
//    private String host ;
//    @Value("${hx.org_name}")
//    private String org_name ;
//    @Value("${hx.app_name}")
//    private String app_name ;
//
//    @Autowired
//    private RedisService redisUtils;
//    @Autowired
//    private RestTemplate restTemplate;
//
//    @Value("${hx.grant_type}")
//    private String grant_type;
//    @Value("${hx.client_id}")
//    private String client_id;
//    @Value("${hx.client_secret}")
//    private String client_secret;
//
//    public synchronized  String getToken(){
//        String hxToken = redisUtils.get("hx_access_token", String.class);
//        if (StrUtil.isBlank(hxToken)){
//            hxToken = requestToken();
//        }
//        return hxToken;
//    }
//
//
//    private  String requestToken(){
//        String api = "/{org_name}/{app_name}/token";
//        String url = getUrl(api);
//        Map<String,Object> params = new HashMap<>();
//        params.put("grant_type", grant_type);
//        params.put("client_id", client_id);
//        params.put("client_secret", client_secret);
//        Map result = restTemplate.postForObject(url, params, Map.class);
//
//        log.info("result:"+ JSON.toJSONString(result));
//        String hx_access_token = (String) result.get("access_token");
//        Object expires_in = result.get("expires_in");
//        redisUtils.save("hx_access_token",hx_access_token,Integer.valueOf(String.valueOf(expires_in)));
//        return "Bearer "+hx_access_token;
//    }
//
//    private String getUrl(String api) {
//        return host+ api
//                .replace("{org_name}",org_name)
//                .replace("{app_name}",app_name);
//    }
//
//    private HttpEntity<String> getStringHttpEntity(Object params) {
//        HttpHeaders headers = new HttpHeaders();
//        String token = getToken();
//        headers.add("Authorization", token);
//        headers.setContentType(MediaType.APPLICATION_JSON);
//        String jsonStr=null;
//        if (params != null) {
//            jsonStr = JSONUtil.toJsonStr(params);
//        }
//        return new HttpEntity<>(jsonStr,headers );
//    }
//
//    private <T>  T tokenRestTemplate(String url, Object requestParams, HttpMethod httpMethod, String path, Class<T> resultType) {
//        ResponseEntity<Map> exchange = restTemplate.exchange(
//                url,
//                httpMethod,
//                getStringHttpEntity(requestParams),
//                Map.class);
//
//        Map exchangeBody = exchange.getBody();
//        log.info("response={}", JSON.toJSONString(exchangeBody));
//        JSONObject responseBody = new JSONObject(exchangeBody);
//        String error = (String) responseBody.getByPath("error");
//        if (StrUtil.isNotBlank(error)){
//            throw new RuntimeException("环信接口异常！");
//        }
//        T result;
//        if (StrUtil.isBlank(path)){
//            return (T) exchangeBody;
//        }
//        result = responseBody.getByPath(path, resultType);
//        return result;
//    }
//
//    /**
//     * 注册用户
//     * @return
//     */
//    public void addUsers(List<TUser> userEntities) {
//        String api = "/{org_name}/{app_name}/users";
//        String url = getUrl(api);
////[
////        {
////            "username": "string",
////            "password": "string"
////        }
////]
//        if (CollectionUtil.isEmpty(userEntities)){
//            throw new RuntimeException("注册用户列表不能为空！");
//        }
//        List<Map<String, String>> params = userEntities.stream().map(u -> {
//            String username = String.valueOf(u.getId());
//            String password = u.getPhone().substring(6,11);
//            Map<String, String> map = new HashMap<>();
//            map.put("username", username);
//            map.put("password", password);
//            map.put("nickname", u.getNickName());
//            return map;
//        }).collect(Collectors.toList());
//
//        Map map = tokenRestTemplate(url, params, HttpMethod.POST, null, Map.class);
//
//    }
//    /**
//     * 用户发送消息
//     * @return
//     */
//    public void sendUserMsg(List<TUser> tos, TUser from, String message) {
//        String api = "/{org_name}/{app_name}/messages";
//        String url = getUrl(api);
////        {"target_type": "users","target": ["user2","user3"],"msg": {"type": "txt","msg": "testmessage"},"from": "user1"}
//
//        List<String> toUserIds = tos.stream().map(u -> String.valueOf(u.getId())).collect(Collectors.toList());
//        Map params = new HashMap();
//        params.put("target_type","users");
//        params.put("target",toUserIds);
//
//        Map msg = new HashMap();
//        msg.put("type", "txt");
//        msg.put("msg", message);
//        params.put("msg",msg);
//        params.put("from", String.valueOf(from.getId()));
//        Map map = tokenRestTemplate(url, params, HttpMethod.POST, null, Map.class);
//    }
//
//    /**
//     * 获取用户信息
//     * @return
//     */
//    public Map getUser(Long userId) {
//        String api = "/{org_name}/{app_name}/users/{username}";
//        String url = getUrl(api);
//        url = url.replace("{username}", String.valueOf(userId));
//
//
//        Map map = tokenRestTemplate(url, null, HttpMethod.GET, "entities[0]", Map.class);
//        return map;
//    }
//    /**
//     * 获取用户列表
//     * @return
//     */
//    public Map getUserList(String limit,String cursor) {
//        String api = "/{org_name}/{app_name}/users?limit="+limit;
//        String url = getUrl(api);
//        if (StrUtil.isNotBlank(cursor)){
//            url=url+"cursor="+cursor;
//        }
//        Map map = tokenRestTemplate(url, null, HttpMethod.GET, null, Map.class);
//        JSONObject responseBody = new JSONObject(map);
//        JSONArray entities = (JSONArray) responseBody.getByPath("entities");
//        String resCursor = (String) responseBody.getByPath("cursor");
//        Map res = new HashMap();
//        res.put("cursor",resCursor);
//        res.put("entities",entities);
//        return res;
//    }
//}
